
package fr.miage.orleans.aar.ejb;

import fr.miage.orleans.aar.modele.Arbitre;
import fr.miage.orleans.aar.modele.But;
import fr.miage.orleans.aar.modele.ButTirAuBut;
import fr.miage.orleans.aar.modele.Equipe;
import fr.miage.orleans.aar.modele.EquipeTournoi;
import fr.miage.orleans.aar.modele.Joueur;
import fr.miage.orleans.aar.modele.MatchTour;
import fr.miage.orleans.aar.modele.PosteJoueur;
import fr.miage.orleans.aar.modele.Tournoi;

import java.util.Collection;

/**
 * Facade permettant de retourner les entity bean 
 */
public interface FacadeGetters {
    
	/**
	 * Retourne la liste des postes de joueurs
	 * @return Collection<PosteJoueur> la liste des postes joueurs
	 */
    public Collection<PosteJoueur> getPostesJoueurs();
    
    /**
     * Retourne la liste de tous les joueurs
     * @return Collection<Joueur> la liste des joueurs
     */
    public Collection<Joueur> getAllJoueurs();

    /**
     * Retourne la liste de tout les tournois
     * @return Collection<Tournoi> la liste des tournois
     */
    public Collection<Tournoi> getAllTournois();
    
    /**
     * Retourne la liste de toutes les equipes
     * @return
     */
    public Collection<Equipe> getAllEquipes();
    
    
    /**
     * Retourne le tournoi identifié
     * @param id l'identifiant du tournoi
     * @return Le tournoi
     */
    public Tournoi getTournoiById(int id);

    /**
     * Retourne le tournoi avec ses collections de matchs
     * @param id l'identifiant du tournoi
     * @return Le tournoi
     */
    public Tournoi getTournoiDetailById(int id);
    
    /**
     * Retourne une equipe identifiée
     * @param equipeId l'identifiant de l'équipe
     * @return L'équipe
     */
    public Equipe getEquipeById(int equipeId);
    
    /**
     * Retourne une equipeTournoi identifiée
     * @param tournoiId le tournoi concerné
     * @param equipeId l'équipe concernée
     * @return L'équipe tournoi concercnée
     */
    public EquipeTournoi getEquipeTournoiById(int tournoiId, int equipeId);
    
    /**
     * Retourne le matchTour identifiée
     * @param matchId l'identifiant du match tour
     * @return Le MatchTour identifié
     */
    public MatchTour getMatchTourById(int matchId);
    
    /**
     * Retourne le frere d'un matchTour (adversaire du prochain rang)
     * @param matchId le frère du frère a recherché
     * @return Le MatchTour frère
     */
    public MatchTour getMatchTourFrereById(int matchId);
    
    /**
     * Retourne le joueur identifiée
     * @param idJoueur l'identifiant du joueurs
     * @return Le joueur identifié
     */ 
    public Joueur getJoueurById(int idJoueur);
    
    /**
     * Retourne tous les joueurs de léquipe
     * @param equipeId l'identifiant de l'équipe
     * @return Une collection<Joueur> des joueurs de léquipe
     */
    public Collection<Joueur> getJoueursEquipe(int equipeId);
    
    /**
     * Retourne tous les joueurs sans equipes
     * @return Une Collection<Joueur> sans équipes
     */
    public Collection<Joueur> getJoueursSansEquipes();
    
    /**
     * Retourne une collection d'équipe non inscrites a un tournoi
     * @param tournoiId L'identifiant du tournoi
     * @return Une Collection<Equipe> non inscrite a ce tournoi
     */
    public Collection<Equipe> getEquipesNonInscrites(int tournoiId);
    
    /**
     * Retourne l'arbitre identifié
     * @param idArbitre l'identifiant de l'arbitre
     * @return L'arbitre identifié
     */
    public Arbitre getArbitreById(int idArbitre);

    /**
     * Retourne le poste joueur identifié
     * @param PosteId l'identifiant du poste
     * @return Le poste Joueur
     */
	public PosteJoueur getPosteJoueurById(int PosteId);
}
